#include <func.h>

#define N 10000000
int main()
{
    int shmid;
    shmid=shmget(1000,4096,IPC_CREAT|0600);
    ERROR_CHECK(shmid,-1,"shmget");
    printf("%d\n",shmid);
    int *p=shmat(shmid,NULL,0);
    int i;
    int sem_id=semget(1000,1,IPC_CREAT|0600);
    ERROR_CHECK(sem_id,-1,"semget");
    int ret=semctl(sem_id,0,SETVAL,1);
    ERROR_CHECK(ret,-1,"semctl");
    struct sembuf sopp,sopv;
    sopp.sem_num=0;
    sopp.sem_op=-1;
    sopp.sem_flg=SEM_UNDO;
    sopv.sem_num=0;
    sopv.sem_op=1;
    sopv.sem_flg=SEM_UNDO;
    p[0]=0;
    if(!fork())
    {
        semop(sem_id,&sopp,1);
        for(i=0;i<N;i++)
        {
            p[0]++;
        }
        semop(sem_id,&sopv,1);
        return 0;
    }
    else
    {
        semop(sem_id,&sopp,1);
        for(i=0;i<N;i++)
        {
            p[0]++;
        }
        semop(sem_id,&sopv,1);
        wait(NULL);
        printf("%d\n",p[0]);
        return 0;
    }
}